#ifndef __FLASH_H
#define __FLASH_H

#include "stm32f10x.h"
#include "../dht11/bsp_dht11.h"

/* Flash存储相关定义 */
#define FLASH_DATA_START_ADDR    0x08070000  // 数据存储起始地址(448KB处)
#define FLASH_PAGE_SIZE          2048        // STM32F103VE页大小2KB
#define DHT11_DATA_SIZE          sizeof(DHT11_Flash_Data_TypeDef)
#define DHT11_SINGLE_RECORD_ADDR FLASH_DATA_START_ADDR  // 单条记录存储地址

/* DHT11 Flash存储数据结构 */
typedef struct
{
    uint32_t timestamp;     // 时间戳(系统运行时间，单位：秒)
    uint8_t  humi_int;      // 湿度整数部分
    uint8_t  humi_deci;     // 湿度小数部分  
    uint8_t  temp_int;      // 温度整数部分
    uint8_t  temp_deci;     // 温度小数部分
    uint8_t  check_sum;     // 校验和
    uint8_t  valid_flag;    // 数据有效标志 0xAA=有效, 0xFF=无效
    uint8_t  reserved[2];   // 保留字节，保证结构体大小为4的倍数
} DHT11_Flash_Data_TypeDef;

/* Flash操作状态 */
typedef enum
{
    FLASH_OP_SUCCESS = 0,
    FLASH_OP_ERROR,
    FLASH_OP_TIMEOUT,
    FLASH_OP_ADDR_ERROR,
    FLASH_OP_FULL
} Flash_Status_TypeDef;

/* 函数声明 */
Flash_Status_TypeDef Flash_Init(void);
Flash_Status_TypeDef Flash_EraseDataPage(uint32_t page_addr);
Flash_Status_TypeDef Flash_WriteData(uint32_t addr, uint8_t *data, uint16_t len);
Flash_Status_TypeDef Flash_ReadData(uint32_t addr, uint8_t *data, uint16_t len);

Flash_Status_TypeDef DHT11_Flash_SaveData(DHT11_Data_TypeDef *dht11_data, uint32_t timestamp);
Flash_Status_TypeDef DHT11_Flash_ReadLatestData(DHT11_Flash_Data_TypeDef *flash_data);
Flash_Status_TypeDef DHT11_Flash_EraseData(void);
uint8_t DHT11_Flash_HasValidData(void);

#endif
